import numpy as np
import json

# 函数名： weight_calculation
# 输入参数：
# 1）rootPath， 被测试系统根路径， 字符串， 未使用
# 2）algorithmName， 算法名称， 字符串， 调用本函数时，应该为“weight_calculation”，未使用
# 3）algorithmType， 算法类型， 字符串， 未使用
# 4）algorithmPara， 实际计算参数，Json格式字符串， 举例：
#                    "{\"currentItem\": \"故障处理能力\", \"childItem\": {\"规则引擎有无\": \"0.1\", \"模型框架有无\": \"0.2\", \"数据样本有无\": \"0.3\", \"知识组织有无\": \"0.4\"}}"
#    对于本函数， 解开后内容为：
#    "currentItem": "当前节点名称"
#    “childItem”： 子节点信息， 可变长度[ [ItemName1, Value1], [ItemName2, Value2], …,[ItemNameN, ValueN] ]，也就是多个[字符串，浮点数值]对
# 5）additionalPara, 附加参数, 字符串， 未使用
# 返回值：
# 1）Values, 多个浮点数值
# 2）ValueInfos, 附加信息, 多个字符串，Values对应的文本信息
# 3) Err, 错误码，没有错误，Err=0
# 4) ErrInfo, 错误信息，可以为空
def weight_calculation(rootPath:str,
                       algorithmName:str,
                       algorithmType:str,
                       algorithmPara:str,
                       additionalPara:str):
    #...
    ret = {}
    dict_data = json.loads(algorithmPara)  # 解析json数据为字典数据
    currentItem = dict_data['currentItem']
    ItemInfo = dict_data['childItem']
    n = len(ItemInfo)
    sum = (n+1) * n / 2
    Values = list(ItemInfo.values())
    Values = list(map(float, Values))
    Values = list(np.array(Values)/sum)
    AdditionalInfo = 'Hello world!'

    ValueInfos = list(ItemInfo.keys())

    ret['Values'] = Values
    ret['ValueInfos'] = ValueInfos
    ret['Err'] = 0
    ret['ErrInfo'] = ''
    return ret
